/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pl.tewi.types;

import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

/**
 * Opis modułu aplikacji uzyskany na podstawie adnotacji
 * @author Marcin Kwapisz
 */
public class ModuleDesc {

    private final String name;
    private final String modulePath;
    private final ApplicationType moduleType;
    private final ArrayList<String> descriptors;

    /**
     * Wygenerowany na podstawie adnotacji opis mudułu
     * @param name nazwa
     * @param modulePath ścieżka do modułu
     * @param moduleType typ modułu
     * @param descriptors ścieżki do deskryptorów instalacyjnych
     */
    public ModuleDesc(String name, String modulePath, ApplicationType moduleType, ArrayList<String> descriptors) {
        this.name = name;
        this.modulePath = modulePath;
        this.moduleType = moduleType;
        this.descriptors = descriptors;
    }

    /**
     * Lista deskryptorów instalacyjnych modułu
     * @return Lista deskryptorów instalacyjnych modułu
     */
    public List<String> getDescriptors() {
        return descriptors;
    }

    /**
     * typ modułu
     * @return typ modułu
     */
    public ApplicationType getModuleType() {
        return moduleType;
    }

    /**
     * Ścieżka do modułu aplikacji
     * @return ścieżka do modułu aplikacji
     */
    public String getModulePath() {
        return modulePath;
    }

    /**
     * Nazwa modułu
     * @return nazwa modułu
     */
    public String getName() {
        return name;
    }

    @Override
    public boolean equals(Object obj) {
        EqualsBuilder equalsBuilder = new EqualsBuilder();
        if (obj == null) {
            return false;
        }
        if (obj == this) {
            return true;
        }
        if (!(obj instanceof ModuleDesc)) {
            return false;
        }
        ModuleDesc comp = (ModuleDesc) obj;
        return equalsBuilder.append(this.name, comp.name).isEquals();
    }

    /**
     * Przyjęto że dany obiekt identyfikowany jest przez {@link ModuleDesc#name}
     * @return hashcode
     */
    @Override
    public int hashCode() {
        HashCodeBuilder hashCodeBuilder = new HashCodeBuilder(29, 37);
        return hashCodeBuilder.append(name).toHashCode();
    }

    @Override
    public String toString() {
        ToStringBuilder builder = new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE);
        return builder.append(name).append(modulePath).append(moduleType).toString();
    }
}
